/*
 *    Copyright 2010 Vanessa Williams
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

package bioformatica.sequence;

/**
 * Abstract class representing a sequence in a valid alphabet: RNA, DNA, PROTEIN.
 * Supports random access and iteration.
 */
public abstract class Sequence implements Iterable<Byte> {

    public enum Alphabet {
        RNA,
        DNA,
        PROTEIN
    };

    /**
     * Get a subsequence of the sequence
     * @param startPosition 1-based position at which to start
     * @param endPosition 1-based position at which to end
     * @return a byte array of the requested subsequence
     */
    public abstract byte[] getSubsequence(int startPosition, int endPosition);

    /**
     *
     * @return  This sequence's alphabet: RNA, DNA, PROTEIN
     */
    public abstract Alphabet getAlphabet();
}
